#include<stdio.h>

int n;
int a[10],book[10];

//递归核心代码
void dfs(int step)
{
    if(step == n+1){    //递归结束条件
        for(int i=1;i<=n;i++){
            printf("%d",a[i]);
        }
        printf("\n");
        
        return; //返回上一步
    }else{
        for(int i=1;i<=n;i++){//当下该怎么做
            if(book[i]==0){
                book[i]=1;    //进行放入
                a[step]=i;    //放入第step步
                dfs(step+1);  //深度下一节
                book[i]=0;    //进行回收（非常重要的一步）
            }
        }
        return;
    }
}

int main()
{
    scanf("%d",&n);
    dfs(1);
    getchar();
    return 0;
}

